export default {
    // context对象,是一个与strore实例,有相同属性和方法的对象
    // addAAsync(context, payload) {
    // 	console.log("addAAsync被调用");
    // 	console.log("context", context); // {commit,dispatch,}
    // 	console.log("payload", payload);
    // 	// 获取commit方法  context.commit()  =>用于触发mutation中的方法
    // 	setTimeout(() => {
    // 		context.commit("addA", payload)
    // 	}, 2000);
    // },
    // addBAsync(context, payload = 1) {
    // 	console.log("addBAsync被调用");
    // 	console.log("context", context); // {commit,dispatch,}
    // 	console.log("payload", payload);
    // 	// 获取commit方法  context.commit()  =>用于触发mutation中的方法
    // 	setTimeout(() => {
    // 		context.commit("addB", payload)
    // 	}, 2000);
    // },
    // addBothAsync(context, payload) {
    // 	console.log("addBAsync被调用");
    // 	console.log("context", context); // {commit,dispatch,}
    // 	console.log("payload", payload);
    // 	// 获取commit方法  context.commit()  =>用于触发mutation中的方法
    // 	setTimeout(() => {
    // 		// context.commit("addBoth",payload)
    // 		var { m = 1, n = 1 } = payload;

    // 		this.commit("addA", m);
    // 		this.commit("addB", n);
    // 	}, 2000);
    // }

    // {commit,dispatch,state,getters} = context

    // 函数的参数解构 => 如果函数的参数已经确定是一个对象,可以直接对该参数解构
    addAAsync(context, payload) {  // context => {commit,dispatch,state,getters}
        console.log("addAAsync被调用");
        console.log("context", context); // {commit,dispatch,state,getters}
        console.log("payload", payload);

        var {commit} = context;

        // 默认返回 pending状态的promise实例  ->  2s后会变为fulfilled
        return new Promise(function(resolve){  
            setTimeout(() => {
                commit("addA", payload);
                resolve();
            }, 2000);
        })
        
    },
    addBAsync({commit}, payload = 1) {
        console.log("addBAsync被调用");
        console.log("payload", payload);
        // 获取commit方法  context.commit()  =>用于触发mutation中的方法

        return new Promise(function(resolve){  
            setTimeout(() => {
                commit("addB", payload)
                resolve();
            }, 2000);
        })
        
    },
    addBothAsync({commit}, payload) {
        console.log("addBAsync被调用");
        console.log("payload", payload);
        // 获取commit方法  context.commit()  =>用于触发mutation中的方法
        setTimeout(() => {
            // context.commit("addBoth",payload)
            var { m = 1, n = 1 } = payload;

            commit("addA", m);
            commit("addB", n);
        }, 2000);
    },
    // 等待2s => 先加A =>等待2s => 在加B
    addBothChain({dispatch}, payload) {   // dispatch触发action中封装的方法
        console.log("addBothChain被调用");
        console.log("payload", payload);
        // 获取commit方法  context.commit()  =>用于触发mutation中的方法

        // p.then(()=>{
        // 	return 1
        // }).then(()=>{
        // 	return 2
        // }).then(()=>{
        // 	return 3
        // })

        // p.then(()=>{
        // 	return p1
        // }).then(()=>{
        // 	return p2
        // }).then(()=>{
        // 	return p3
        // })
        var { m = 1, n = 1 } = payload;
        dispatch("addAAsync",m).then(()=>{
            return dispatch("addBAsync",n);
        }).then(()=>{
            console.log("等待2s => 先加A =>等待2s => 在加B 执行完毕");
        })
    },
    addBothChainAsync: async function({dispatch}, payload) {   // dispatch触发action中封装的方法
        console.log("addBothChain被调用");
        console.log("payload", payload);
        // 获取commit方法  context.commit()  =>用于触发mutation中的方法

        // p.then(()=>{
        // 	return 1
        // }).then(()=>{
        // 	return 2
        // }).then(()=>{
        // 	return 3
        // })

        // p.then(()=>{
        // 	return p1
        // }).then(()=>{
        // 	return p2
        // }).then(()=>{
        // 	return p3
        // })
        var { m = 1, n = 1 } = payload;
        await dispatch("addAAsync",m)
        await dispatch("addBAsync",n);
    }
}